 | | ORIENTACIÓN A EXPRESIONES |
“Todo lenguaje ideal debe basarse en el concepto de ‘expresión’, una representación de signos y símbolos” (Alfred North Whitehead)
“La expresión y el pensamiento son una sola cosa” (Peirce)
MENTAL es un lenguaje orientado a expresiones
Mediante una expresión se puede especificar cualquier estructura de información: una función, una secuencia, un conjunto, un procedimiento, un objeto, una regla, una función de orden superior, una regla de orden superior, etc.
Expresiones simples y compuestas
Una expresión simple (o átomo) es un dígito o una letra (minúscula o mayúscula) o un carácter especial o un símbolo de operador. Ejemplos de expresiones simples son:
Una expresión compuesta es la que contiene más de un átomo, por ejemplo:
Pepe 31z EstadoCivil (x+y+z) 4*x {a b c}
Jerarquía de expresiones. Subexpresiones y superexpresiones
Una expresión se puede componer de otras expresiones, y éstas a su vez de otras, y así sucesivamente en una estructura de tipo jerárquico. Dada una expresión x
, hay que considerar:
- Subexpresiones.
Son las que están contenidas o forman parte de x
.
- Superexpresiones.
Son las que contienen a x
.
Ejemplos:
(a b c d) // contiene las subexpresiones a, b, c, d
(a+b+c) // contiene las subexpresiones a, +, b, +, c
a+(b*c)+d
Contiene las subexpresiones: a
, +
, (b*c)
, +
, d
.
A su vez, (b*c)
contiene las subexpresiones: b
, *
, c
En este caso, b
es una sub-subexpresión de la expresión inicial y ésta una super-superexpresión de b
.
Expresiones consistentes e inconsistentes
Una expresión es consistente cuando se ajusta a las normas de escritura de paréntesis, e inconsistente cuando no se ajusta.
Por ejemplo, las expresiones siguientes son consistentes:
(a bc x*y) (1+…+9) {a (b c)}
y las siguientes son inconsistentes:
En MENTAL, cuando hablamos de una expresión, en general, nos estamos refiriendo a expresiones consistentes.
MENTAL es un lenguaje totalmente flexible. Permite combinar expresiones sin restricciones, aún siendo incorrectas semánticamente en un cierto momento (aunque posteriormente pueden dejar de serlo). Ejemplo:
(x = (a + + + b)) // semánticamente incorrecta
x/(+ = c) // sustituir + por c. El resultado es (a c c c b)
Continente y contenido
Se denomina “continente” (o “contexto”) de una expresión a la expresión de orden inmediato superior (superexpresión) en la que está contenida. Por ejemplo, si tenemos la expresión
(z = ((a+b)*c)¸(d-e))
entonces el contexto de:
a
es (a+b)
(a+b)
es ((a+b)*c)
((a+b)*c)
es ((a+b)*c)¸(d-e)
((a+b)*c)¸(d−e)
es (z = ((a+b)*c)¸(d−e))
El contenido de una expresión son todos los componentes (subexpresiones de nivel inmediato inferior) de dicha expresión. Por ejemplo, el contenido de (3 5 7)
son los elementos 3
, 5
y 7
. Y el contenido de (a+(b*c))
son las expresiones a
, +
y (b*c)
.
Comentarios
Se especifican la derecha de los símbolos //
. Ejemplos:
(x = x+1) // sumar 1 a x
// esto es un comentario
Expresiones constructivas, descriptivas e informativas
Las expresiones pueden ser:
- Constructivas.
Son las que, al evaluarse, crean (o producen) nuevas expresiones, por ejemplo:
3+5+7 // ev. 15 (“ev.” indica “se evalúa como”)
((a b) ∪ (c d)) // ev. (a b c d) ev. abcd
- Descriptivas.
Son las que describen expresiones, por ejemplo:
( 1…5 ) // rep. (1 2 3 4 5) ev. 12345 (“rep.” indica “representa a”)
([1 2 3]*2) // rep. (1*2 2*2 3*2) ev. (2 4 6) ev. 246
(ab)☆ // rep. ab ab ab ...
- Informativas.
Son un tipo de expresiones constructivas que revelan una propiedad de una expresión, por ejemplo:
(1 3 5 7)# // ev. 4 (longitud de la secuencia)
Hay expresiones mixtas que combinan distintos tipos de expresiones, por ejemplo,
([1…5]+2) // rep. (1+2 2+2 3+2 4+2 5+2) ev. 34567
1+…+5 // rep. 1+2+3+4+5 ev. 15
Expresiones activas y pasivas
Una expresión pasiva es la que no contiene ningún operador constructivo, y por lo tanto se autoevalúan. Corresponden a los datos de los lenguajes tradicionales. Por ejemplo:
(a b c) // ev. abc (se autoevalúa, pero representado de forma más compacta)
(a {b c d} e f) // se autoevalúa
(1…5) // rep. 12345
Una expresión activa es la que especifica una acción a realizar y que contiene al menos un operador constructivo, por ejemplo:
Corresponden a las instrucciones o sentencias de los lenguajes tradicionales.
Una expresión activa puede crear, modificar o eliminar otras expresiones (tanto activas como pasivas). Por ejemplo:
x=(a b c) // ev. x=abc
(x\2 = 3) // modifica el segundo componente de x
x // ev. a3c
Expresiones extensivas e intensivas
Una expresión extensiva es aquella que se especifica mediante todos sus componentes, por ejemplo,
Una expresión intensiva es aquella que incluye uno o varios parámetros. Por ejemplo,
〈( f(x y) = (2*x + y + 1) )〉
Esta expresión describe a todas las expresiones de la forma especificada, en las que x
e y
son parámetros que representan a cualquier expresión.
Expresiones serie y paralela
Una expresión serie (también llamada “secuencia”) es aquella en la que sus componentes están estructurados de forma secuencial (espacial y temporalmente), y se evalúan en serie, uno tras otro, de izquierda a derecha. Una expresión serie se distingue porque sus delimitadores son paréntesis curvos (explícitos o implícitos).
Ejemplo:
(x = 31)
(y = 42)
(x 2*x x+y z) // ev. (3 62 73 z)
xyx // ev. (31 42 31)
Una expresión paralela (también llamada “conjunto”) es aquella en la que sus componentes están estructurados de forma conjunta (espacial y temporalmente), y se evalúan a la vez, simultáneamente, en paralelo. Una expresión paralela se distingue porque sus paréntesis delimitadores son de tipo llave.
Ejemplo:
(x = 2)
(y = 3)
{(x = 12) (y = 13) x+y x*y}) // {(x = 12) (y = 13) 5 6}
En este caso, como se ve, no se consideran los nuevos valores de x
e y
dentro del conjunto
Expresiones abiertas y cerradas
Una expresión cerrada es la que está delimitada por paréntesis curvos o llaves:
Una expresión abierta es la que se obtiene a través del operador primitivo ↓
, es decir, al acceder al contenido de una expresión (obteniéndose los componentes del primer nivel):
{a b c}↓ // ev. a b c
(u (a b c)↓ v) // ev. ( u a b c v)
Operadores simétricos y asimétricos
Los símbolos de los operadores son de dos tipos:
- Los simétricos lateralmente. Por ejemplo, ≡ +. Esto quiere decir que los argumentos son intercambiables. Ejemplos:
x+y // equivale a y+x
x≡y // equivale a y≡x
- Los asimétricos (no simétricos lateralmente). Por ejemplo,
←
o <
Indican diferenciar los argumentos a ambos lados del operador. Ejemplos:
(x ← y) // x si y
(y → x) // si y, entonces x
Expresiones estáticas y dinámicas
Una expresión estática es una expresión que siempre produce la misma expresión al evaluarse (se autoevalúa).
Una expresión dinámica es una expresión que cambia su evaluación con el tiempo.
Las expresiones activas y pasivas pueden ser estáticas o dinámicas.
Ejemplos:
-
(texto = "abcd")
...
(texto = "efgh")
...
Las expresiones "abcd"
y "efgh"
son estáticas, pues se evalúan siempre igual (se autoevalúan).
Las dos expresiones de sustitución también son estáticas, pues siempre se evalúan igual, respectivamente, a:
(texto = "abcd")
y (texto = "efgh")
La expresión texto
es dinámica, pues su evaluación varía a lo largo de la ejecución del programa.
(n = 1)
(n<5 → (n = n+1))
Las expresiones siguientes son dinámicas:
n<5
y n
de esta misma expresión
(n = n+1)
, n
y n+1
de esta misma expresión
Y las expresiones siguientes son estáticas:
1
de (n = 1)
5
de n<5
n
de (n = n+1)
1
de n+1
Meta-expresiones
Son expresiones que hacen referencia a expresiones. Forman lo que podemos denominar “triada existencial”: θ
-α
-Ω
(nada-algo-todo), en donde α
(algo) actúa de mediador entre las otras dos: nada (θ
) y todo (Ω
).
- Expresión existencial negativa o nula (
θ
).
Indica la no existencia de ninguna expresión. Es equivalente a “nada”.
Cuando una expresión se sustituye por la expresión nula, dicha expresión desaparece (se elimina).
Como la expresión nula (θ
) tiene las propiedades
〈( xθ = x )〉
〈( θx = x )〉
entonces &theta se comporta como el operador identidad, pues al actuar sobre cualquier expresión x
produce la misma expresión.
Hay que distinguir entre vacío, nulo y neutro:
- Lo vacío tiene entidad y existe, como el conjunto vacío
{}
y la secuencia vacía ()
. El contenido de ambas es nada, la expresión nula.
- Lo nulo (la expresión nula) desaparece al evaluarse. Por ejemplo,
{x θ}
se evalúa como {x}
.
- Lo neutro está asociado a operaciones. Por ejemplo, el 0 es neutro respecto a la suma
(x+0 = x)
y el 1 es neutro respecto al producto (x*1 = x)
.
- Expresión existencial positiva (
α
).
Indica la existencia de una expresión, de cualquier expresión (excepto la expresión nula), pero ninguna en particular.
- Expresión universal (
Ω
).
Indica todas las infinitas posibles expresiones concretas que pueden formarse con el lenguaje. Las metaexpresiones (θ, α, Ω) no están incluidas porque no son expresiones concretas.
Combinatoria de tipos de expresiones
Como las categorías de tipos de expresiones son independientes, puede haber:
- Expresiones activas estáticas.
- Expresiones activas dinámicas.
- Expresiones pasivas estáticas.
- Expresiones pasivas dinámicas.
- Expresiones descriptivas intensivas.
- etc.
Hay que resaltar que el papel de las expresiones puede cambiar con el tiempo. Por ejemplo, una expresión activa estática se puede convertir en otro momento en pasiva dinámica, etc.
Conjuntos de números por defecto
N
. Conjunto de los números naturales (incluido el cero).
Z
. Conjunto de los números enteros (incluido el cero).
Z/+
. Conjunto de los números enteros positivos.
Z/−
. Conjunto de los números enteros negativos.
R
. Conjunto de los números reales (incluido el cero).
R/+
. Conjunto de los números reales positivos.
R/−
. Conjunto de los números reales negativos.
Nomenclatura para los nombres de las variables numéricas
Las constantes matemáticas se representan con una letra en cursiva, excepto π
y φ
(proporción áurea). Por ejemplo: i
(unidad imaginaria) y e
(constante de Euler). Estos nombres, sin cursiva, pueden utilizarse en las aplicaciones.
En algunos lenguajes de programación se suele aplicar el criterio de que la inicial del nombre de una variable indica el tipo de dato asociado. Su motivación era básicamente implementadora. En MENTAL se utiliza el convenio de la primera letra para indicar el tipo de número, y su motivación es la simplificación: evitar especificar el tipo de variable.
- Números naturales. Empiezan por
n
.
- Números enteros. Empiezan por
i
, j
, k
, l
, m
.
- Números reales. Empiezan por
r
, s
, t
.
- Factores de proporción (números reales entre 0 y 1). Empiezan por
f
.
- Números racionales. Son fracciones entre números. Por ejemplo:
n÷r
, k÷n
, etc.
- Números complejos. Son combinaciones de: (
número + i*número
).
Por ejemplo, (n + i*r)
indica un número complejo de parte real un número natural y de parte imaginaria un número real.
Ejemplos:
- El conjunto de números naturales mayores que 5:
〈( n ← n>5 ← n∈N)〉
Esta expresión se puede simplificar a 〈( n ← n>5 )〉
, pues no hace falta especificar que n
es un número natural.
- El conjunto de números reales mayores que 5:
〈( r ← r>5 ← r∈R)〉
Esta expresión se puede simplificar a 〈( r ← r>5 )〉
, pues no hace falta especificar que r
es un número real.
Propiedades intrínsecas y extrínsecas
Hay dos tipos de propiedades: intrínsecas y extrínsecas.
- Las propiedades intrínsecas son de tipo estructural. Por ejemplo, pertenecer a un conjunto, ser una expresión “hermana” de otro −es decir, pertenecer al mismo grupo (secuencia o conjunto)−, ser el primer componente de una secuencia, etc.
- Una propiedad extrínseca es una propiedad asignada a una expresión, que puede ser una cualidad o un atributo. Por ejemplo,
x/verde
, x/alto
, x/3
, etc.
Una propiedad extrínseca se puede aplicar a cualquier expresión. Por ejemplo:
( C = {〈(x ← x/p)〉} )
C/q {〈(n ← n>3)〉}/q